home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / hardware / ahd12 / ahd / auto.c < prev    next >
C/C++ Source or Header  |  2000-02-28  |  3KB  |  107 lines

  1. #include "exec/types.h"
  2. #include "exec/execbase.h"
  3. #include "libraries/romboot_base.h"
  4. #include "libraries/expansionbase.h"
  5. #include "libraries/filehandler.h"
  6.  
  7. #define DE_MAXTRANSFER     13
  8. #define DE_MASK            14
  9. #define DE_BOOTPRI         15
  10. #define DE_DOSTYPE         16
  11.  
  12. /*#define DEBUG  /**/
  13. /*#define AUTOBOOT /**/
  14.  
  15. struct DeviceNode *MakeDosNode(ULONG *);
  16. void   Enqueue(struct List *, struct Node *);
  17.  
  18. extern struct ExpansionBase *ExpansionBase;
  19. extern struct ExecBase *SysBase;
  20. extern char *myName;
  21.  
  22. struct CurrentBinding md_CBind;
  23. struct BootNode md_BootNode;
  24. char dosName[] = "SFS";
  25. ULONG ParmPkt[30];
  26. char temp[80];
  27.  
  28. ULONG
  29. config()
  30.    {
  31. #ifdef AUTOBOOT
  32.    struct DeviceNode *md_DevNode, *MakeDosNode();
  33.    int rc;
  34. #endif
  35.  
  36.    ParmPkt[0] = (ULONG)"SFS";
  37.    ParmPkt[1] = (ULONG)"ahd.device";
  38.    ParmPkt[2] = 1;
  39.    ParmPkt[3] = 0;
  40.  
  41.    ParmPkt[4 + DE_TABLESIZE] = DE_DOSTYPE;
  42.    ParmPkt[4 + DE_SIZEBLOCK] = 512 >> 2;
  43.    ParmPkt[4 + DE_SECORG] = 0;
  44.    ParmPkt[4 + DE_NUMHEADS] = 4;
  45.    ParmPkt[4 + DE_SECSPERBLK] = 1;
  46.    ParmPkt[4 + DE_BLKSPERTRACK] = 17;
  47.    ParmPkt[4 + DE_RESERVEDBLKS] = 2;
  48.    ParmPkt[4 + DE_PREFAC] = 0;
  49.    ParmPkt[4 + DE_INTERLEAVE] = 0;
  50.    ParmPkt[4 + DE_LOWCYL] = 2;
  51.    ParmPkt[4 + DE_UPPERCYL] = 40;
  52.    ParmPkt[4 + DE_NUMBUFFERS] = 5;
  53.    ParmPkt[4 + DE_MEMBUFTYPE] = 1;
  54.    ParmPkt[4 + DE_MAXTRANSFER] = 65536;
  55.    ParmPkt[4 + DE_MASK] = 0xfffffe;
  56.    ParmPkt[4 + DE_BOOTPRI] = 0;
  57.    ParmPkt[4 + DE_DOSTYPE] = 0x444f5300;
  58.  
  59. #ifdef DEBUG
  60.    cputstr("Open ExpansionBase: ");
  61. #endif
  62.    ExpansionBase =
  63.       (struct ExpansionBase *)OpenLibrary("expansion.library",0);
  64. #ifdef DEBUG
  65.    cputstr((ExpansionBase) ? "succeeded" : "failed");
  66.    cputstr("\r\n");
  67. #endif
  68.    if(!ExpansionBase)
  69.       return(-1);
  70.  
  71.    SumLibrary(SysBase);
  72.  
  73. #ifdef DEBUG
  74.    sprintf(temp, "ChkSum = %x\n\r", SysBase->ChkSum);
  75.    cputstr(temp);
  76. #endif
  77.  
  78. #ifdef AUTOBOOT
  79.    cputstr("MakeDosNode: ");
  80.    md_DevNode = MakeDosNode(ParmPkt);
  81.    cputstr((md_DevNode) ? "succeeded" : "failed");
  82.    cputstr("\r\n");
  83.  
  84.    cputstr("AddDosNode: ");
  85.    rc = AddDosNode(0, 0, md_DevNode);
  86.    cputstr((rc) ? "succeeded" : "failed");
  87.    cputstr("\r\n");
  88.  
  89.    cputstr("Initializing BootNode\n\r");
  90.    md_BootNode.bn_DeviceNode = (CPTR)md_DevNode;
  91.    md_BootNode.bn_Flags = 0;
  92.    md_BootNode.bn_Node.ln_Pri = 0;
  93.    md_BootNode.bn_Node.ln_Type = NT_BOOTNODE;
  94.    md_BootNode.bn_Node.ln_Name = md_CBind.cb_ConfigDev;
  95.    cputstr("Done\n\r");
  96.  
  97.    Enqueue(&(ExpansionBase->MountList), &md_BootNode);
  98. #endif
  99.  
  100.    CloseLibrary(ExpansionBase);
  101. #ifdef DEBUG
  102.    cputstr("Exited Config\n\r");
  103. #endif
  104.    return(0);
  105.    }
  106.  
  107.